package EnviaEmail;

import java.io.File;
import java.io.Serializable;
import java.io.UnsupportedEncodingException;
import java.sql.Connection;
import java.util.Date;
import java.util.Properties;

import javax.activation.DataHandler;
import javax.activation.DataSource;
import javax.activation.FileDataSource;
import javax.mail.Address;
import javax.mail.BodyPart;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Multipart;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;

import Util.connect;

public class EnviadorDeEmailHTML implements Serializable {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	private String EMAIL_REMETENTE;
	private String NOME_REMETENTE;

	public void enviarEmail(String assunto, String conteudo, String arquivo,
			String tx_email, String tx_nome) throws AddressException,
			MessagingException {
		Session session = getSession();
		Message message = criarMensagem(session, assunto, tx_email, tx_nome);
		adicionarConteudoEAnexo(message, conteudo, arquivo);
		message.saveChanges();

		try {
			Transport.send(message);
		} finally {

		}
	}

	private Message criarMensagem(Session session, String assunto,
			String tx_email, String tx_nome) throws MessagingException,
			AddressException {

		MimeMessage message = new MimeMessage(session);
		Address enderecoRemetente = null;
		Address enderecoDestinatario = null;
		try {
			enderecoDestinatario = new InternetAddress(tx_email, tx_nome);
			enderecoRemetente = new InternetAddress(EMAIL_REMETENTE,
					NOME_REMETENTE);
		} catch (UnsupportedEncodingException ex) {
			throw new AddressException(ex.getMessage());
		}
		message.addRecipient(Message.RecipientType.TO, enderecoDestinatario);
		message.setFrom(enderecoRemetente);
		message.setSubject(assunto);
		message.setSentDate(new Date());
		return message;
	}

	private void adicionarConteudoEAnexo(Message message, String conteudo,
			String arquivo) throws MessagingException, AddressException {

		// Cria um Multipart que ser� composto pelo conteudo e pelo anexo
		Multipart multipart = new MimeMultipart();

		// Cria a parte do corpo da mensagem (texto do conte�do do e-mail)
		BodyPart messageBodyPartConteudo = new MimeBodyPart();
		messageBodyPartConteudo.setContent(conteudo, "text/html");

		// Adiciona o corpo da mensagem ao Multipart
		multipart.addBodyPart(messageBodyPartConteudo);

		if (arquivo != null) {
			// Cria uma segunda parte do corpo (anexos do cont�udo do e-mail)
			BodyPart messageBodyPartAnexo = new MimeBodyPart();
			// Cria o anexo
			String temporario = System.getProperty("user.home");
			DataSource source = new FileDataSource(temporario + "/" + arquivo);
			// Define o data handler para o anexo
			messageBodyPartAnexo.setDataHandler(new DataHandler(source));
			// Define o nome do arquivo
			String nomeArquivo = new File(arquivo).getName();
			messageBodyPartAnexo.setFileName(nomeArquivo);
			// Adiciona o anexo ao Multipart
			multipart.addBodyPart(messageBodyPartAnexo);
		}

		// Adiciona o Multipart a mensagem
		message.setContent(multipart);
	}

	private Session getSession() {
		Session session = null;
		Properties props = new Properties();

		props.put("mail.smtp.host", "smtp.gmail.com");
		props.put("mail.smtp.auth", "true");
		props.put("mail.smtp.socketFactory.port", "465");
		props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
        props.put("mail.smtp.port", "465");

		
		//session = Session.getDefaultInstance(props, new Autenticador(
		//		"wilramone1234567@gmail.com", "wcvwcv"));
        
        session = Session.getDefaultInstance(props,
                new javax.mail.Authenticator() {
                     protected PasswordAuthentication getPasswordAuthentication()
                     {
                           return new PasswordAuthentication("willramone1234567@gmail.com", "wcvwcv");
                     }
                });

		return session;
	}

	public String getEMAIL_REMETENTE() {
		return EMAIL_REMETENTE;
	}

	public void setEMAIL_REMETENTE(String email_remetente) {
		EMAIL_REMETENTE = email_remetente;
	}

	public String getNOME_REMETENTE() {
		return NOME_REMETENTE;
	}

	public void setNOME_REMETENTE(String nome_remetente) {
		NOME_REMETENTE = nome_remetente;
	}

	
	public static void main (String args[]){
		try {
			EnviadorDeEmailHTML ht = new EnviadorDeEmailHTML();
			ht.setEMAIL_REMETENTE("wilramone1234567@gmail.com");
			ht.setNOME_REMETENTE("Gu's Bingo");
			ht.enviarEmail("Teste", "Testando", null, "willvideira@uol.com.br", "Willian");
		} catch (AddressException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (MessagingException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
			
	}
}
